package com.yuxi.Service;

import java.util.List;

import org.springframework.stereotype.Service;

import com.sun.org.apache.xml.internal.resolver.helpers.PublicId;
import com.yuxi.Entity.CommentRecord;
import com.yuxi.Entity.CommentRecordBrowse;
import com.yuxi.Entity.ConferenceRecord;
import com.yuxi.Entity.EvaluationRecord;
import com.yuxi.Entity.EvaluationRecordBrowse;
import com.yuxi.Entity.Information;
import com.yuxi.Entity.InformationClassification;
import com.yuxi.Entity.InformationOperationRecord;
import com.yuxi.Entity.InformationPort;
import com.yuxi.Entity.InformationPortPower;
import com.yuxi.Entity.InformationQuality;
import com.yuxi.Entity.InformationSort;
import com.yuxi.Entity.InformationSource;
import com.yuxi.Entity.ModifyInformationRecord;
import com.yuxi.Entity.Position;
import com.yuxi.Entity.PowerModule;
import com.yuxi.Entity.PowerRole;
import com.yuxi.Entity.PrisonRole;
import com.yuxi.Entity.PrisonStructure;
import com.yuxi.Entity.Role;
import com.yuxi.Entity.TaskCompletion;
import com.yuxi.Entity.TaskDispatch;
import com.yuxi.Entity.UserInfo;
import com.yuxi.Entity.UserPosition;
import com.yuxi.Entity.UserView;
import com.yuxi.Request.Page;
import com.yuxi.Request.UserQuery;

/**
 * 监狱 service 类
 * @version 0.1 2016-07-19 18:23:05
 * @author wyd
 * */
@Service
public interface PrisonService {
	/**
	 * 添加监狱结构
	 * @param  pStructure PrisonStructure
	 * @return PrisonStructure
	 * */
	public PrisonStructure addStructure(PrisonStructure pStructure);
	/**
	 * 根据id获取监区结构
	 * @param structureId
	 * @return
	 */
	public PrisonStructure getStructure(Integer id);
	/**
	 * 添加监狱上级结构
	 * @param pStructure	PrisonStructure 类 
	 * @return  
	 * */
	public PrisonStructure addSuperStructure(PrisonStructure pStructure);
	/**
	 * 修改监狱结构
	 * @param  pStructure PrisonStructure
	 * @return PrisonStructure
	 * */
	public void modifyStructure(PrisonStructure pStructure);
	/**
	 * 获取所有监狱结构
	 * @return 
	 * */
	public List<PrisonStructure> getAllStructure();
	/**
	 * 获取所有监狱上级结构
	 * @return 
	 * */
	public List<PrisonStructure> getAllSuperStructure();
	/**
	 * 获取所有监区
	 * @return 
	 * */
	public List<PrisonStructure> getAllPrisonArea();
	/**
	 * 获取所有科室和监区
	 * @return 
	 * */
	public List<PrisonStructure> getDepartmentAndPrisonArea();
	/**
	 * 通过上级id获取监狱结构
	 * @param  pStructure PrisonStructure 
	 * @return PrisonStructure
	 * */
	public List<PrisonStructure> getAllStructureBySuperId(Integer superId);
	/**
	 * 删除监狱结构
	 * @param  pStructure PrisonStructure
	 * @return PrisonStructure
	 * */
	public void deleteStructure(PrisonStructure pStructure);
	/**
	 * 添加信息分类
	 * @param  iSort InformationSort
	 * @return InformationSort
	 * */
	public InformationSort addSort(InformationSort iSort);
	/**
	 * 获取所有分级
	 * @return List<InformationClassification>
	 * */
	public List<InformationClassification> getAllInformationClassification();
	/**
	 * 获取所有渠道
	 * @return List<InformationSource> 
	 * */
	public List<InformationSource> getAllInformationSource();

	/**
	 * 获取所有监狱渠道
	 * @return List<InformationSort>
	 * */
	public List<InformationSort> getAllInformationSort();
	/**
	 * 获取所有任务完成情况等级
	 * @param 	
	 * @return List<TaskCompletion> 
	 * */
	public List<TaskCompletion> getAllTaskCompletion();
	/**
	 * 获取所有信息和质量等级
	 * @param 	
	 * @return List<InformationQuality>
	 * */
	public List<InformationQuality> getAllInformationQuality();
	/**
	 * 删除信息质量等级
	 * @param  iQuality InformationQuality
	 * @return PrisonStructure
	 * */
	public void deleteQuality(InformationQuality iQuality);
	/**
	 * 删除任务完成等级
	 * @param  tCompletion TaskCompletion
	 * @return TaskCompletion
	 * */
	public void deleteCompletion(TaskCompletion tCompletion);
	/**
	 * 修改信息质量等级
	 * @param  iQuality InformationQuality
	 * @return PrisonStructure
	 * */
	public void modifyQuality(InformationQuality iQuality);
	/**
	 * 修改任务完成等级
	 * @param  tCompletion TaskCompletion
	 * @return TaskCompletion
	 * */
	public void modifyCompletion(TaskCompletion tCompletion);
	/**
	 * 添加信息质量等级
	 * @param  iQuality InformationQuality
	 * @return PrisonStructure
	 * */
	public InformationQuality addQuality(InformationQuality iQuality);
	/**
	 * 添加任务完成等级
	 * @param  tCompletion TaskCompletion
	 * @return TaskCompletion
	 * */
	public TaskCompletion addCompletion(TaskCompletion tCompletion);
	/**
	 * 添加信息分类
	 * @param pStructure	PrisonStructure 类 
	 * @return  InformationSort
	 * */
	public InformationSort addInfoSort(InformationSort iSort);
	/**
	 * 添信息渠道
	 * @param pStructure	PrisonStructure 类 
	 * @return  InformationSource
	 * */
	public boolean addInfoSource(InformationSource iSource);
	/**
	 * 添加信息分级
	 * @param pStructure	PrisonStructure 类 
	 * @return  InformationClassification
	 * */
	public InformationClassification addInfoClassification(InformationClassification iClassification);
	/**
	 * 修改信息分类
	 * @param	iSort InformationSort 类   
	 * */
	public void modifyInfoSort(InformationSort iSort);
	/**
	 * 修改信息渠道
	 * @param iSource	InformationSource 类  
	 * */
	public boolean modifyInfoSource(Integer id,Integer level,Integer superId, String name,String remark,Integer lastSuperId);
	/**
	 * 修改信息分级
	 * @param iClassification	InformationClassification 类 
	 * */
	public void modifyInfoClassification(InformationClassification iClassification);
	/**
	 * 删除信息分类
	 * @param	iSort InformationSort 类 
	 * */
	public void delInfoSort(InformationSort iSort);
	/**
	 * 删除信息渠道
	 * @param iSource	InformationSource 类 
	 * */
	public void delInfoSource(InformationSource iSource);
	/**
	 * 删除信息分级
	 * @param iClassification	InformationClassification 类 
	 * */
	public void delInfoClassification(InformationClassification iClassification);
	/**
	 * 修改一个模块的权限
	 * @param  pModule PowerModule
	 * */
	public void modifyPowerModule(PowerModule pModule);
	/**
	 * 通过模块名获取一个模块的权限
	 * @param   name 
	 * @return pModule PowerModule 
	 * */
	public PowerModule  getPowerModuleByName(String name);
	/**
	 * 获取所有监狱角色
	 * @return List<PrisonRole> 
	 * */
	public List<PrisonRole> getAllPrisonRole();
	/**
	 * 添加监狱角色
	 * @param  pRole PrisonRole
	 * @return PrisonRole
	 * */
	public Role addPrisonRole(Role role,PowerRole powerRole,String portStr);
	/**
	 * 删除信息分类
	 * @param	pRole PrisonRole 类 
	 * @return  
	 * */
	public boolean delPrisonRole(Role role);
	/**
	 * 修改信息分类
	 * @param	pRole PrisonRole 类 
	 * @return  
	 * */
	public boolean modifyPrisonRole(Role pRole,PowerRole powerRole,String portStr);
	/**
	 * 通过StructureId获取PrisonRole
	 * @param 	StructureId
	 * @return PrisonRole 
	 * */
	public List<PrisonRole> getRoleByStructureId(PrisonStructure pStructure);
	/**
	 * 获取所有PowerModule
	 * @return List<PowerModule> 
	 * */
	public List<PowerModule> getAllModule();
	/**
	 * 通过roleId获取PowerRole
	 * @param 	roleId
	 * @return PowerRole 
	 * */
	public List<PowerRole> getPowerByRoleId(Integer roleId);
	/**
	 * 通过id获取角色
	 * @param  id
	 * @return  PrisonRole
	 * */
	public Role getPrisonRoleById(Integer Id);
	
	/**
	 * 添加一条会议记录
	 * @param  
	 * @return  ConferenceRecord类
	 * */
	public ConferenceRecord addConferenceRecord(ConferenceRecord conferenceRecord,Information information);
	/**
	 * 通过警号或者姓名查找用户
	 * @param 	Account or name
	 * @return List<UserInfo>
	 * */
	public List<UserInfo> getUserListByAccountOrName(String userAccountOrName);
	/**
	 * 通过警号或者姓名查找用户
	 * @param 	Account or name
	 * @return List<UserInfo>
	 * */
	public ConferenceRecord getRecordByInfoId(Integer infoId);
	
	/**
	 * 修改用户密码
	 * @param  userInfo UserInfo
	 * @return 
	 * */
	public boolean modifyUserPassword(UserInfo userInfo);
	/**
	 * 根据用户id查询用户信息
	 * */
	public UserView getUserViewById(Integer id);
	
	/**
	 * 用户修改信息 (id查出要修改的information——> 创建用户修改记录（）——>存入修改信息记录表——>更新信息)
	 * @param information 要修改的information 对象
	 * @param userInfo 修改的用户
	 * @author wyd
	 * */
	public boolean userUpdataInformation(ConferenceRecord conferenceRecord,Information information,Information oldInfo,UserInfo userInfo,String ip);
	/**
	 * 用户修改信息 (id查出要修改的information——> 创建用户修改记录（）——>存入修改信息记录表——>更新信息)
	 * @param information 要修改的information 对象
	 * @param userInfo 修改的用户
	 * @author wyd
	 * */
	public boolean infoResearchUpdataInformation(ConferenceRecord conferenceRecord,Information information,Information oldInfo,UserInfo userInfo,String ip,String flag);

	/**
	 * 根据信息id查询用户操作信息记录
	 * */
	public List<InformationOperationRecord> getOperationByInfoId(Integer id);
	
	/**
	 * 获取信息的任务派遣的记录
	 * @param infoId
	 * @return
	 */
	public List<TaskDispatch> getTaskDispatchByInfoId(int infoId);
	/**
	 * 获取信息点评记录
	 * @param infoId
	 * @return
	 */
	public CommentRecord  getCommentRecordByInfoId(int infoId);
	/**
	 * 获取信息评价记录
	 * @param infoId
	 * @return
	 */
	public EvaluationRecord  getEvaluationRecordByInfoId(int infoId,Integer userId);
	public List<EvaluationRecord>  getAllEvaluationRecord(int infoId,Integer userId);
	/**
	 * 添加一条点评记录浏览信息
	 * @param infoId
	 * @return
	 */

	public boolean  addCommentRecordBrowse(int infoId,UserInfo u);
	public boolean  addEvaluationRecordBrowse(int infoId,UserInfo u);
	/**
	 * 
	 * @param infoId
	 * @param u
	 * @return
	 */
	public boolean modifyCommentRecordBrowse(int infoId,int id,UserInfo u);
	/**
	 * 
	 * @param infoId
	 * @param u
	 * @return
	 */
	public boolean modifyEvaluationRecordBrowse(int infoId,UserInfo u);
	/**
	 * 添加一条点评记录浏览信息
	 * @param infoId
	 * @return
	 */
	public List<CommentRecordBrowse>  getCommentRecordBrowseByInfoId(int infoId);
	/**
	 * 添加一条评价记录浏览信息
	 * @param infoId
	 * @return
	 */
	public List<EvaluationRecordBrowse>  getEvaluationRecordBrowseByInfoId(int infoId,int eRecordId);
	/**
	 * 获取所有信息分口
	 * @return List<InformationPort> 
	 * */
	public List<InformationPort> getAllInformationPort();
	/**
	 * 修改信息分口
	 * @return
	 * */
	public boolean modifyInformationPort(Integer id,Integer level,Integer superId, String name,String remark,Integer lastSuperId);
	/**
	 * 添加信息分口
	 * @return 
	 * */
	public InformationPort addInformationPort(InformationPort informationPort);
	/**
	 * 删除信息分口
	 * @return 
	 * */
	public boolean deleteInformationPort(InformationPort informationPort);
	/**
	 * 获取角色分口权限
	 * @return 
	 * */
	public List<InformationPortPower> getPortPowerByRoleId(Integer roleId);
	
	/**
	 * 添加职务
	 * @param 	 
	 * @return  
	 * */
	public boolean addPosition(Position position );
	/**
	 * 获取职务信息
	 * @param 	 
	 * @return  
	 * */
	public Position getPosition(Integer id );
	/**
	 * 添加用户职务
	 * @param 	 
	 * @return  
	 * */
	public boolean addUserPosition(UserPosition userPosition );
	/**
	 * 删除职务
	 * @param 	 
	 * @return  
	 * */
	public boolean deletePosition(Position position );
	/**
	 * 删除用户职务
	 * @param 	 
	 * @return  
	 * */
	public boolean deleteUserPosition(UserPosition userPosition );
	/**
	 * 修改职务
	 * @param 	 
	 * @return  
	 * */
	public boolean modifyPosition(Position position );
	/**
	 * 修改用户职务
	 * @param 	 
	 * @return  
	 * */
	public boolean modifyUserPosition(UserPosition userPosition );
	/**
	 * 获取所有职务
	 * @param 	 
	 * @return  
	 * */
	public List<Position> getAllPsoition(  );
	/**
	 * 获取用户职务
	 * @param 	 
	 * @return  
	 * */
	public List<UserPosition> getUserPositionByUserId(Integer userId  );
	/**
	 * 添加角色
	 * @param 	 
	 * @return  
	 * */
	public boolean addRole(Role role );
	/**
	 * 删除角色
	 * @param 	 
	 * @return  
	 * */
	public boolean deleteRole(Role role );
	/**
	 * 修改角色
	 * @param 	 
	 * @return  
	 * */
	public boolean modifyRole(Role role );
	/**
	 * 获取所有角色
	 * @param 	 
	 * @return  
	 * */
	public List<Role> getAllRole( );
	
	/**
	 * 根据条件获取部门下的用户
	 * */
	public Page<UserView> getUserList(UserQuery userQuery,Integer structureId,Page<UserView> p);
	/**
	 * 
	 * @param idStr
	 * @param levelStr
	 * @param superId
	 * @return
	 */
	public boolean infoSoureCompositor(String idStr,String levelStr);
	/**
	 * 
	 * @param idStr
	 * @param levelStr
	 * @param superId
	 * @return
	 */
	public boolean infoPortCompositor(String idStr,String levelStr);
	/**
	 * 
	 * @param superId
	 * @return
	 */
	public List<InformationSource> getInformationSourceBySuperId(Integer superId);
	/**
	 * 
	 * @param superId
	 * @return
	 */
	public List<InformationPort> getInformationPortBySuperId(Integer superId);
	/**
	 * 
	 * @param Id
	 * @return
	 */
	public InformationPort getInformationPortById(Integer id);
	/**
	 * 
	 * @param Id
	 * @return
	 */
	public InformationSource getInformationSourceById(Integer id);
	/**
	 * 通过记录id和信息id获取详细的修改记录
	 * @param recordId
	 * @param infoId
	 * @return
	 */
	public ModifyInformationRecord getModifyRecordByInfoIdAndRecoredId(Integer recordId,Integer infoId); 
	/**
	 * 获取类型为空的部门
	 * @return
	 */
	public List<PrisonStructure> getAllQuestionStructure();
	public boolean modifyQuestionStructure(PrisonStructure pStructure);
}
